package com.health.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.health.dao.CheckGroupMapper;
import com.health.pojo.CheckGroup;
import com.health.vo.PageResult;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
public class CheckGroupServiceImpl implements CheckGroupService{
    @Resource
    private CheckGroupMapper checkGroupMapper;
    /**
     *检查组分页查询
     */
    public PageResult<CheckGroup> findPage(Integer pageNow, Integer pageSize, String query) {
        //分页插件,自动将limit SQL语句添加到条件查询之后
      PageHelper.startPage(pageNow, pageSize);
      //条件查询,page中包含查询的总行数和分页后的列表
      Page<CheckGroup> page= checkGroupMapper.findByQuery(query);

        return new PageResult<CheckGroup>(page.getTotal(),page.getResult());
    }
    /**
     * 删除检查组
     */
    @Transactional(rollbackFor = Exception.class)//添加事务回滚
    public int deleteById(Integer id) {
        //到关联表中查询该检查组是否有被使用
        int count=checkGroupMapper.findCountByCheckGroupId(id);
        //已被使用抛出异常阻止操作
        if (count>0){
            throw new RuntimeException("该检查组已被使用,无法删除");
        }

        //未被使用,先删除与检查项的关联,再删除检查组
        int count1=checkGroupMapper.deleteCheckGroupCheckItem(id);

        //删除检查组
        return checkGroupMapper.deleteById(id);
    }
    /**
     * 添加检查组
     */
    @Transactional(rollbackFor = Exception.class)
    public int add(CheckGroup checkGroup, Integer[] checkItemIds) {
        //添加检查组
        int count=checkGroupMapper.add(checkGroup);

        //添加检查组关联的检查项
        if (checkItemIds !=null && checkItemIds.length>0){
            //获取检查组id
            int checkgroup_id=checkGroup.getId();

            checkGroupMapper.addCheckGroupCheckItems(checkgroup_id,checkItemIds);
        }

        return count;
    }
    /**
     * 查询检查组
     */
    public CheckGroup findById(Integer id) {
        return checkGroupMapper.findById(id);
    }
    /**
     * 查询检查组关联的检查项id
     */
    public List<Integer> findCheckItemIds(Integer id) {

        return checkGroupMapper.findCheckItemIds(id);
    }
    /**
     * 编辑检查组2-根据id查询检查组关联的检查项id,数据回显
     */
    @Transactional(rollbackFor = Exception.class)
    public int update(CheckGroup checkGroup, Integer[] checkItemIds) {
        //修改检查组信息
        int count = checkGroupMapper.update(checkGroup);

        //删除原来的检查项关联
        //获取检查组id
        Integer id = checkGroup.getId();
        checkGroupMapper.deleteCheckGroupCheckItem(id);

        //添加新的检查项关联,需要先判断null和数组长度>0
        if (checkItemIds != null && checkItemIds.length>0){
            checkGroupMapper.addCheckGroupCheckItems(id,checkItemIds);
        }

        return count;
    }
    /**
     * 查询检查组
     */
    public List<CheckGroup> findByQuery(String query) {
        return checkGroupMapper.findByQuery(query);
    }
}
